package com.cn.delan.jdbc;

import java.sql.Date;
import java.sql.Timestamp;
import java.util.Hashtable;
import java.util.Set;

import com.cn.delan.core.util.DateUtil;
/**
 * 数据记录类,用于记录一行信息
 * @author BingGo
 * @version 1.0
 */
public class Row<K,T> extends Hashtable<K,T>{
	
	private static final long serialVersionUID = 5834255346264328820L;
	/**
	 * 在记录中增加注入项信息
	 * @param cellId 注入项的ID
	 * @param cellValue 注入项的值
	 * @return 返回该注入项的原始值
	 */
	public Object addCell(K cellId,T cellValue){
		return this.put(cellId, cellValue);
	}
	/**
	 * 在记录中取出指定注入项的值
	 * @param cellId 注入项ID
	 * @return 注入项的值
	 */
	public Object getCell(String cellId){
		return super.get(cellId);
	}
	/**
	 * 在记录中取出指定注入项的值的字符串形式
	 * @param cellId 注入项ID
	 * @return 注入项的值的字符串形式
	 */
	public String getCellValue(String cellId){
		Object obj = this.getCell(cellId);
		//根据不同的数据类型获取其字符串形式
		if(Timestamp.class.equals(obj.getClass())){
			return this.getValue((Timestamp)obj);
		}
		if(Date.class.equals(obj.getClass())){
			return this.getValue((Date)obj);
		}
		return this.getValue(obj);
	}
	/**
	 * 获取注入项ID集合
	 * @return 注入项ID集合
	 */
	public Set<K> getCellKeys(){
		return this.keySet();
	}
	String getValue(Object data){
		return data.toString();
	}
	String getValue(String data){
		return data;
	}
	String getValue(Integer data){
		return String.valueOf(data);
	}
	String getValue(Float data){
		return String.valueOf(data);
	}
	String getValue(Double data){
		return String.valueOf(data);
	}
	/**
	 * 日期值获取方法,将日期转换为yyyy-MM-dd的格式,格式变化时需要重写此方法
	 * @param date 日期对象
	 * @return 转换后的日期字符串形式
	 */
	String getValue(Date data){
		return DateUtil.toString(data, "yyyy-MM-dd");
	}
	/**
	 * 时间值获取方法,将时间转换为yyyy-MM-dd HH:mm:ss的格式,格式变化时需要重写此方法
	 * @param date 时间对象
	 * @return 转换后的时间字符串形式
	 */
	String getValue(Timestamp data){
		return DateUtil.toString(data, "yyyy-MM-dd HH:mm:ss");
	}
	
}
